package com.zrc.superframe_net.utils

import android.content.Context
import com.orhanobut.hawk.Hawk

/**
 * @Author: superman
 * @CreateTime: 2020/12/2
 * @Describe:Hawk 是一个简单的  key-value  数据库
 *
 * 存储例子:Hawk.put("key", "something"); // Save string
 *        Hawk.put("key", true); // save boolean
 *        Hawk.put("key", new Foo()); // save an object
 *        Hawk.put("key", List<String>); // save list
 *        Hawk.put("key", List<Foo>); // save list
 *        Hawk.put("key", Map<Foo,Foo>); // save map
 *        Hawk.put("key", Set<Foo>); // save set
 *        Hawk.put("key", 1234); // save numbers
 *        Hawk.put(key, T);
 *
 * 获取的例子:
 *       String value = Hawk.get(key);
 *       int value = Hawk.get(key);
 *       Foo value = Hawk.get(key);
 *       boolean value = Hawk.get(key);
 *       List<String> value = Hawk.get(key);
 *       List<Foo> value = Hawk.get(key);
 *       Map<String,Foo> value = Hawk.get(key);
 *       Set<Foo> value = Hawk.get(key);
 *       T result = Hawk.get(key);
 *       T result = Hawk.get(key, T);//当为null的时候设置 默认值
 *
 * 移除数据:
 *       Hawk.remove(key);//单个移除
 *       Hawk.remove(KEY_LIST, KEY_NAME);//同时移除多个
 *
 * 数据是否存在判断:
 *       boolean contains = Hawk.contains(key);//判断是否包含某个key
 *
 * 初始化:初始化可能需要 36-400ms
 *     Hawk.init(this)
 *         .setEncryptionMethod(HawkBuilder.EncryptionMethod.HIGHEST)
 *         .setStorage(HawkBuilder.newSqliteStorage(this))
 *         //.setStorage(HawkBuilder.newSqliteStorage(this))
 *         //.setPassword("password")//设置密码 默认不设置
 *         .setLogLevel(LogLevel.FULL)
 *         .build();
 *
 * 日志输出:
 *     Hawk.init(context,PASSWORD, LogLevel.FULL);
 *
 */
object HawkSpUtitls {

    /**
     * @context:上下文
     * @Describe: 此方法在application中初始化
     */
    fun init(context: Context) = Hawk.init(context).build()

    /**
     * @key:键
     * @value:值
     * @Describe: 保存数据
     */
    fun <T> save(key: String, value: T) = Hawk.put(key, value)

    /**
     * @key:键
     * @value:值
     * @default:当值为null时 返回默认值
     * @Describe: 获取数据
     */
    fun <T> get(key: String, value: T)= Hawk.get(key, value)

    /**
     * @key:键
     * @Describe: 删除指定数据
     */
    fun delete(key: String) = Hawk.delete(key)

    /**
     * @key:键
     * @Describe: 清空数据库
     */
    fun clear() = Hawk.deleteAll()

    /**
     * @Describe: 获取存储数据的数量
     */
    fun count() = Hawk.count()

    /**
     * @key:键
     * @Describe: 是否包含某条数据
     */
    fun contains(key: String) = Hawk.contains(key)
}